package com.qfedu.openplateform.user.controller;

import com.qfedu.openplateform.cache.service.CacheService;
import com.qfedu.openplateform.common.entity.ResponseData;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.Instant;
import java.util.Date;

@RestController
public class UserController {
    @Autowired
    private CacheService cacheService;

    /**
     * 开放平台 第三方用户使用，必须登录，并且返回
     *                                 token
     * @param username
     * @param password
     * @return
     */
    @RequestMapping("/login")
    public ResponseData<String> login(String username, String password) throws Exception {

        ResponseData<String> responseData = new ResponseData();

    // 得到用户名 密码 后需要远程调用 后台管理应用  内的第三方用户，进行密码校验

    // 为了简单我们 都是用 写死的用户名密码 省去远程校验
        if ("admin".equals(username) && "admin".equals(password)){


        // 生成 token ,并且将token 保存到 redis 中

        // 生成token
        Instant now = Instant.now();
        String token = Jwts.builder()

                .setSubject("admin")//设置当前的用户是谁,当然任何信息都可以随便写,只不过你后续拿到之后不知道怎么处理而已
                .setIssuedAt(Date.from(now))//设置开始的有效期  token 有效期
                .setExpiration(Date.from(now.plusSeconds(60*60)))//设置过期时间我当前时间顺延一小时

                // 载荷  个人的不敏感信息
                .claim("username", username)//可以随便内容,主要是键值对,可以在需要的地方拿出来
                // 头部 加密算法    盐（meiyoumima）
                .signWith(SignatureAlgorithm.HS256,"meiyoumima".getBytes())//设置签名的算法和秘钥值
                .compact();

        //将token 保存到 redis 中  单位是毫秒
        cacheService.save2Redis("token-" + username, token,60*60*1000);

        // 返回数据
        responseData.setCode("1");
        responseData.setMessage("success");

        // 写入token
        responseData.setData(token);

        return  responseData;
    }



    // 返回数据
        responseData.setCode("0");
        responseData.setMessage("登录验证失败");
        return  responseData;


}


}
